from django import template
from django.utils.html import format_html

register = template.Library()

# 自定义页面优化显示标签
@register.simple_tag
def PageShow(count,request):
	# count 为总的页码数
	# request 当前页面的请求对象
	# 获取当前页面
	p = int(request.GET.get('p',1))
	## 定义显示页面的开始和结束页
	begin = p - 4
	end = p + 5

	if p > count - 5:
		begin = count - 9
		end = count

	if p < 5:
		begin = 1
		end = 10

	if count < 10:
		begin = 1
		end = count
	
	# request.path: /admin/user/list/
	#'request.GET.dict()':{'p' : 2, types': 'all', 'keywords': '女'}
	# 需要的url：admin/user/list/?p=2&types=all&keywords=%E5%A5%B3
	#  类别查询时，分类的条件拼接
	url = request.path
	args = ''
	for k,v in request.GET.items():
		if k != 'p':
			# args += '&' + k + '=' + v
			args += f'&{k}={v}'
	### args 是用于搜索的条件的拼接子串，拼接在分页的url后面。。。。。。。
	# 显示页码
	s = ''
	## 显示总页数
	s = f'<li><a>总计{count}页/{p}页</a></li>'
	# 首页显示
	s += f'<li><a href="{url}?p={1}{args}">首页</a></li>'
	## 若果不是第一页显示上一页图标
	if p == 1:
		s += f'<li class="am-disabled"><a href="{url}?p={p}{args}">上一页</a></li>'
	else:
		s += f'<li><a href="{url}?p={p-1}{args}">上一页</a></li>'
	for x in range(begin,end+1):
		# 如果是当前页面，不一样显示
		if x == p:
			s += f'<li class="am-active"><a href="{url}?p={x}{args}">{x}</a></li>'
		else:
			s += f'<li><a href="{url}?p={x}{args}">{x}</a></li>'
	## 如果不是最后一页，显示下一页
	if p == count:
		s += f'<li class="am-disabled"><a href="{url}?p={count}{args}">下一页</a></li>'
	else:
		s += f'<li><a href="{url}?p={p+1}{args}">下一页</a></li>'

	# 最后一页的显示
	s += f'<li><a href="{url}?p={count}{args}">尾页</a></li>'

	## format_html(s)---对代码进行编译输出
	return format_html(s)